home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / ms_dos / txf / src / txflog2.c < prev    next >
C/C++ Source or Header  |  1993-07-08  |  10KB  |  439 lines

  1. /***************
  2. *
  3. * g:\exe\txf\src\txflog2.c
  4. */
  5. #include "txf.h"
  6.  
  7.  
  8. #define BYTE(x) *((unsigned char *)(x))
  9. #define BIT_CHK(x,f) ((int)(BYTE(x+(f/8)) >> 7-f%8) & 1)
  10.  
  11. void get_forum(int type)
  12. {
  13.     char *dmyptr;
  14.  
  15.     log_pname[0] = NUL;
  16.     if (type == 1) {
  17.         dmyptr = log_bufptr - 49;
  18.         while (*dmyptr > ' ') {
  19.             dmyptr--;
  20.         }
  21.     }
  22.     if (type == 2) {
  23.         dmyptr = log_bufptr + 1;
  24.     }
  25.     sscanf(dmyptr, "%16s", log_fname);
  26. }
  27. void get_libno(int type)
  28. {
  29. char *dmyptr;
  30.     if ((type == 1) || (type == 2)) {
  31.         dmyptr = log_bufptr + 1;
  32.     }
  33.     sscanf(dmyptr, "%[0-9]", log_libstr);
  34. }
  35.  
  36. void get_titlestr()
  37. {
  38.     char *tmp;
  39.  
  40.     tmp = log_bufptr;
  41.  
  42. /* 暫定 */
  43.     while ( matchstr("re:", tmp)) {
  44.         tmp += 3;
  45.     }
  46.     while ( matchstr("re'*%:", tmp)) {
  47.         tmp += 5;
  48.     }
  49.  
  50.     if (strncmp(tmp, log_resstr, strlen(log_resstr)))
  51.         strcpy(log_titlestr, log_resstr);
  52.     strncat(log_titlestr, tmp, 41);
  53.  
  54.     tmp = strchr(log_titlestr, 0x0d);
  55.     if (tmp != NULL) {
  56.         *tmp = NUL;
  57.     }
  58.     else {
  59.         if (strlen(log_titlestr) > 40) {
  60.             *(jstradv(log_titlestr, btom(log_titlestr, 38))) = NUL;
  61.         }
  62.     }
  63.     if (viewmode > 9) {
  64.         fprintf(stderr, "Info:TITLE:%s\n", log_titlestr);
  65.     }
  66.  
  67. }
  68.  
  69. void meschk(int style)
  70. {
  71.  
  72.     if (style == 3) {
  73.         sscanf(log_bufptr, "%[0-9]", log_reply);
  74.         log_bufptr += 10;
  75.         strncpy(log_resp, log_bufptr, 8);
  76.         log_bufptr += 28;
  77.         get_titlestr();
  78.         if ((log_bufptr = strchr(log_bufptr, 0x0a)) == NULL) {
  79.             printf("Error:find EOF before title+1 line");
  80.             exit(1);
  81.         }
  82.         log_bufptr += 2;
  83.         sscanf(log_bufptr, "%2d", &log_mesno);
  84.     }
  85.     else if (style == 2) {
  86.         log_bufptr += 2;
  87.         sscanf(log_bufptr, "%s  MES(%d)", log_fname, &log_mesno);
  88.         if (log_mesno == 0) {
  89.             sscanf(log_bufptr, "MES(%d)", &log_mesno);
  90.         }
  91.         *log_reply = NUL;
  92.         *log_titlestr = NUL;
  93.     }
  94.     else if (style == 1) {
  95.         sscanf(log_bufptr, "%2d", &log_mesno);
  96.         *log_reply = NUL;
  97.         *log_titlestr = NUL;
  98.     }
  99.     else if (style == 8) {
  100.         sscanf(log_bufptr, "%[0-9]", log_reply);
  101.         log_bufptr += 12;
  102.         strncpy(log_resp, log_bufptr, 8);
  103.         log_bufptr += 27;
  104.         get_titlestr();
  105.         if ((log_bufptr = strchr(log_bufptr, 0x0a)) == NULL) {
  106.             printf("Error:find EOF before title+1 line");
  107.             exit(1);
  108.         }
  109.         log_bufptr += 2;
  110.         sscanf(log_bufptr, "%2d", &log_mesno);
  111.     }
  112.     if (log_pname[0] == NULL) {
  113.         printf("forum=%s;mes=%d;reply=%s;resp=%s;title=%s\n"
  114.             , log_fname, log_mesno, log_reply, log_resp, log_titlestr);
  115.     }
  116.     else {
  117.         printf("patio=%s;mes=%d;reply=%s;resp=%s;title=%s\n"
  118.             , log_pname, log_mesno, log_reply, log_resp, log_titlestr);
  119.     }
  120.  
  121. }
  122.  
  123. void dlibchk(int style)
  124. {
  125.     int i=0, j=0, type=CT_ANK, dmy=0;
  126.  
  127.     if (style == 5) { /* for 週間FTOWNS */
  128.         log_bufptr += 3;
  129.         sscanf(log_bufptr, "%4d", &log_downno);
  130.         log_bufptr += 4;
  131.     }
  132.     else if (style == 4) {
  133.         sscanf(log_bufptr, "%4d", &log_downno);
  134.         log_bufptr += 39;
  135.     }
  136.     for (i=0;((j<12)&&(*(log_bufptr+i)!='.')&&(*(log_bufptr+i)!='\n'));i++) {
  137.         if (BIT_CHK(filechr, *(log_bufptr + i)) ||
  138.                 ((type = chkctype(*(log_bufptr + i), type)) != CT_ANK)) {
  139.             *(log_downname + j) = *(log_bufptr + i);
  140.             j++;
  141.         }
  142.     }
  143.     if (*(log_bufptr+i) == '.') {
  144.         *(log_downname+j) = '.';
  145.         j++;
  146.         log_bufptr += i;
  147.         for (i = 1; (*(log_bufptr + i) != '.') &&
  148.                 (*(log_bufptr+i)!='\n'); i++) {
  149.             if (i == 1) {
  150.                 while (*(log_bufptr + i) == ' ') {
  151.                     dmy++;
  152.                     i++;
  153.                 }
  154.             }
  155.             if (BIT_CHK(filechr, *(log_bufptr+i)) ||
  156.                     ((type = chkctype((*log_bufptr + i), type)) != CT_ANK)) {
  157.                 *(log_downname + j) = *(log_bufptr + i);
  158.                 j++;
  159.             }
  160.             if ((i - dmy) >= 3) {
  161.                 break;
  162.             }
  163.         }
  164.     }
  165.     strcpy(log_docfile, log_downname);
  166.     if (strchr(log_docfile, '.')) {
  167.         strcpy(strchr(log_docfile, '.'), ".GGG");
  168.     }
  169.     else {
  170. #if !LIBNAME
  171.         if (strlen(log_downname) <= 8) {
  172.             strcat(log_downname, ".DAT");
  173.             strcat(log_docfile, ".GGG");
  174.         }
  175.         else {
  176.             if (nthctype(log_downname, 7) != CT_KJ1) {
  177.                 strcpy(log_downname + 8, ".DAT");
  178.                 strcpy(log_docfile + 8, ".GGG");
  179.             }
  180.             else {
  181.                 strcpy(log_downname + 7, ".DAT");
  182.                 strcpy(log_docfile + 7, ".GGG");
  183.             }
  184.         }
  185. #else
  186.         if (sprintf(log_downname, "LIB%d_%d.LZH",
  187.             atoi(log_libstr), log_downno) > 12) {
  188.             sprintf(log_downname, "%d_%d.LZH",atoi(log_libstr), log_downno);
  189.             sprintf(log_docfile, "%d_%d.GGG",atoi(log_libstr), log_downno);
  190.         }
  191.         else {
  192.             sprintf(log_docfile, "LIB%d_%d.GGG",atoi(log_libstr), log_downno);
  193.         }
  194.  
  195. #endif
  196.     }
  197.     printf("forum=%s;libno=%s;datano=%d;docfile=%s;datafile=%s;\n"
  198.         ,log_fname, log_libstr, log_downno, log_docfile, log_downname);
  199.  
  200. }
  201.  
  202. void ffmtopchk()
  203. {
  204. /*
  205. 12/12[TOWNS] ぼむぼむ                 (DL 5-433)
  206. */
  207.     int i, lib, len, cline = 0;
  208.     char *tmpptr, target[80], str[4]="(DL";
  209.  
  210.     tmpptr = str;
  211.     for (i = 0; i < 80; i++) {
  212.         if (*log_bufptr != *tmpptr) {
  213.             tmpptr = str;
  214.             log_bufptr++;
  215.             if (*log_bufptr == 0x0a) {
  216.                 break;
  217.             }
  218.         }
  219.         else {
  220.             tmpptr++;
  221.             log_bufptr++;
  222.             if (*tmpptr == NUL) break;
  223.         }
  224.     }
  225.     if (*tmpptr == NUL) {
  226.         sscanf(log_bufptr + 1, "%2d-%4d", &lib, &log_downno);
  227.         len = sprintf(target, "LIB%d_%d.lzh", lib, log_downno);
  228.         strcpy(log_downname, (target + (len > 12 ? 3 : 0)));
  229.         strcpy(log_docfile, log_downname);
  230.         strcpy(strchr(log_docfile, '.'), ".GGG");
  231.     }
  232.     else {
  233.         printf("Error:Fatal System Error,cannot continue.\n");
  234.         exit(1);
  235.     }
  236.  
  237.     for (pfstr[0] = sfstr[0]; *pfstr[0] != NUL; log_bufptr++) {
  238.         if ((*pfstr[0] == *log_bufptr) || (*pfstr[0] == '*')) {
  239.             pfstr[0]++;
  240.         }
  241.         else {
  242.             pfstr[0] = sfstr[0];
  243.         }
  244.         if (*log_bufptr == 0x0a) {
  245.             cline++;
  246.             if (cline > 100) break;
  247.         }
  248.     }
  249.     if (*pfstr[0]==NUL) get_forum(1);
  250.  
  251.     printf("forum=%s;libno=%d;datano=%d;docfile=%s;datafile=%s;\n"
  252.         ,log_fname, lib, log_downno, log_docfile, log_downname);
  253. }
  254.  
  255. void hpchk()
  256. {
  257.     int i, type = CT_ANK;
  258.     char *handle, *tmp;
  259.     char tmptitle[64];
  260.  
  261.     if ((handle = getenv("TXFUSER")) != NULL) {
  262.         strncpy(log_handle, handle, 16);
  263.     }
  264. #if 0
  265.     else if ((handle = getenv("USER") != NULL) {
  266.         strncpy(log_handle, handle, 16);
  267.     }
  268. #endif
  269.  
  270.     log_bufptr += 23;
  271.     strncpy(log_resp, log_bufptr, 8);
  272.     log_bufptr += 14;
  273.     if (log_hpstyle == 1) {
  274.         tmp = log_bufptr;
  275.         if (((tmp = jstrchr(tmp, ':')) != NULL) && (tmp < strchr(log_bufptr, 0x0d))) {
  276.             log_bufptr = tmp + 1;
  277.         }
  278.     }
  279.  
  280.     get_titlestr();
  281.  
  282.     if (*log_handle != NUL) {
  283.         if (log_hpstyle == 1) {
  284.             if (sprintf(tmptitle, "%s:%s", log_handle, log_titlestr) > 64) {
  285.                 printf("Error:Fatal System Error,cannot continue.\n");
  286.                 exit(1);
  287.             }
  288.             strncpy(log_titlestr, tmptitle, 42);
  289.         }
  290.         else {
  291.             if (jstrchr(log_titlestr, '<') != NULL)
  292.                 *(jstrchr(log_titlestr, '<') + 2) = NUL;
  293.             else strcat(log_titlestr, "<");
  294.             strncat(log_titlestr, log_handle, 40 - strlen(log_titlestr));
  295.         }
  296.     }
  297.  
  298.     for (i = 0; i <= 40; i++) {
  299.         if (*(log_titlestr + i) == NUL) {
  300.             break;
  301.         }
  302.         type = chkctype(*(log_titlestr + i), type);
  303.     }
  304.     if (type != CT_KJ2) {
  305.         if (i > 40) i = 40;
  306.         *(log_titlestr + i) = NUL;
  307.     }
  308.     else {
  309.         *(log_titlestr + 39) = NUL;
  310.     }
  311.  
  312.     printf("hp=%s;resp=%s;title=%s\n", log_idstr, log_resp, log_titlestr);
  313.  
  314. }
  315.  
  316. void mailchk()
  317. {
  318. /*
  319.  2  山田 弘明     PEE01244  05/17 10:21
  320.     題名:FAPX406B.LZH
  321. */
  322.     log_bufptr += 22;
  323.     strncpy(log_idstr, log_bufptr, 8);
  324.     
  325.     if ((log_bufptr = strchr(log_bufptr, 0x0a)) == NULL) {
  326.         printf("Error:find EOF before title+1 line");
  327.         exit(1);
  328.     }
  329.     log_bufptr += 11;
  330.     get_titlestr();
  331.     printf("mail=%s;title=%s\n", log_idstr, log_titlestr);
  332.  
  333. }
  334.  
  335. int matchstr(char *form, char *txtptr)
  336. {
  337.     char *logtmp, *strtmp;
  338.     int i, trueflg = 0, count = 0;
  339.  
  340.     logtmp = txtptr;
  341.     strtmp = form;
  342.     while ((*strtmp != NUL) && (*logtmp != 0x0a)) {
  343.         trueflg = FALSE;
  344.         switch (*strtmp) {
  345.         case '%':
  346.             if (isdigit(*logtmp) || (*logtmp == ' ')) {
  347.                 trueflg = TRUE;
  348.             }
  349.             break;
  350.         case '*':
  351.             if (isalpha(*logtmp)) {
  352.                 trueflg = TRUE;
  353.             }
  354.             break;
  355.         case '_':
  356.             if (*logtmp == ' ') {
  357.                 trueflg = TRUE;
  358.             }
  359.             break;
  360.         case '$':
  361.             trueflg = TRUE;
  362.             break;
  363.         case 0x27:
  364.             strtmp++;
  365.             if (*logtmp == *strtmp) {
  366.                 trueflg = TRUE;
  367.             }
  368.             break;
  369.         case '^':
  370.             strtmp++;
  371.             count = ((*strtmp) - ('0'));
  372.             strtmp++;
  373.             while (trueflg != TRUE) {
  374.                 for (i = 0; i < count; i++) {
  375.                     if (*(logtmp + i) != *(strtmp + i)) {
  376.                         break;
  377.                     }
  378.                 }
  379.                 if (i != count) {
  380.                     logtmp++;
  381.                     if (*logtmp == 0x0a) {
  382.                         break;
  383.                     }
  384.                 }
  385.                 else {
  386.                     trueflg = TRUE;
  387.                 }
  388.             }
  389.             break;
  390.         default:
  391.             if (islower(*strtmp)) {
  392.                 if (tolower(*logtmp) == *strtmp) {
  393.                     trueflg = TRUE;
  394.                 }
  395.             }
  396.             else {
  397.                 if (*logtmp == *strtmp) {
  398.                     trueflg = TRUE;
  399.                 }
  400.             }
  401.         }
  402.         if (trueflg != TRUE) {
  403.             return (FALSE);
  404.         }
  405.         strtmp++;
  406.         logtmp++;
  407.     }
  408.     return (TRUE);
  409.  
  410. }
  411.  
  412. int linestyle()
  413. {
  414. /*
  415. char logstr_mes1[30]="%%   %%%%% ( %%%)   %%/%%   ";
  416. char logstr_mes2[15]="- ^1  MES(%%):";
  417. char logstr_mes3[41]="%%%/%%%   ***%%%%%  $$$$$$$$$$$$$$$$  ";
  418. char logstr_mes4[42]="%%%%%/%%%%% ***%%%%%  $$$$$$$$$$$$$$$$ ";
  419. char logstr_dlib[42]="%%%%$ ***%%%%% %%/%%/%% %%%%%%% %%%% * ";
  420. char logstr_wftowns[5]="  #%";
  421. char logstr_hp[40]="%%%  [%%/%%/%% %%:%%]  ***%%%%%      ";
  422. char logstr_mail[44]="%% $$$$$$$$$$$$$$$$$  ***%%%%%  %%/%% %%:%%";
  423. char logstr_ffmtop[22]="%%/%%[^1]^3(DL%%-%%%)";
  424. */
  425.  
  426.     if (matchstr(logstr_mes1, log_bufptr)) return (1);
  427.     if (matchstr(logstr_mes2, log_bufptr)) return (2);
  428.     if (matchstr(logstr_mes3, log_bufptr)) return (3);
  429.     if (matchstr(logstr_dlib, log_bufptr)) return (4);
  430.     if (matchstr(logstr_wftowns, log_bufptr)) return (5);
  431.     if (matchstr(logstr_hp, log_bufptr)) return (6);
  432.     if (matchstr(logstr_mail, log_bufptr)) return (7);
  433.     if (matchstr(logstr_mes4, log_bufptr)) return (8);
  434.     if (matchstr(logstr_ffmtop, log_bufptr)) return (9);
  435.     return (0);
  436.  
  437. }
  438.  
  439.